// 用户资料管理相关 API
// 使用统一的请求封装

import request from '@/utils/request';
import { API_BASE, API_PREFIX } from '@/config/config.js';

// 获取用户信息
export function getUserInfo() {
  return request({
    url: '/getInfo',
    method: 'GET',
    header: {
      'Content-Type': 'application/json',
      'X-Requested-With': 'XMLHttpRequest'
    }
  });
}

// 获取用户资料
export function getUserProfile() {
  // 由于Swagger配置了pathMapping: /dev-api，后端会自动添加这个前缀
  // 所以前端调用时不需要包含/dev-api，直接使用完整URL
  const profileUrl = `${API_BASE}/system/user/profile`;
  

  
  return new Promise((resolve, reject) => {
    uni.request({
      url: profileUrl,
      method: 'GET',
      header: { 
        'Authorization': 'Bearer ' + uni.getStorageSync('token'),
        'Content-Type': 'application/json'
      },
      success: (res) => {
      
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.data?.msg || '获取失败'}`));
        }
      },
      fail: (err) => {
      
        reject(err);
      }
    });
  });
}

// 更新用户资料
export function updateUserProfile(data) {
  // 由于Swagger配置了pathMapping: /dev-api，后端会自动添加这个前缀
  // 所以前端调用时不需要包含/dev-api，直接使用完整URL
  const updateUrl = `${API_BASE}/system/user/profile`;
  

  
  return new Promise((resolve, reject) => {
    uni.request({
      url: updateUrl,
      method: 'PUT',
      data,
      header: { 
        'Authorization': 'Bearer ' + uni.getStorageSync('token'),
        'Content-Type': 'application/json'
      },
      success: (res) => {
      
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.data?.msg || '更新失败'}`));
        }
      },
      fail: (err) => {
      
        reject(err);
      }
    });
  });
}

// 上传用户头像
export function uploadUserAvatar(filePath, token) {
  // 由于Swagger配置了pathMapping: /dev-api，后端会自动添加这个前缀
  // 所以前端调用时不需要包含/dev-api
  const uploadUrl = `${API_BASE}/system/user/profile/avatar`;
  
  
  
  return new Promise((resolve, reject) => {
    uni.uploadFile({
      url: uploadUrl,
      filePath,
      name: 'avatarfile',
      header: { Authorization: 'Bearer ' + token },
      success: (res) => {
      
        try {
          const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
          if (data && data.code === 200) {
            resolve(data)
          } else {
            reject(new Error(data?.msg || '上传失败'))
          }
        } catch (e) {
          reject(new Error('解析响应失败'))
        }
      },
      fail: (err) => {
      
        reject(err)
      }
    })
  })
}

// 修改密码
export function changePassword(data) {
  // 由于Swagger配置了pathMapping: /dev-api，后端会自动添加这个前缀
  // 所以前端调用时不需要包含/dev-api，直接使用完整URL
  const passwordUrl = `${API_BASE}/system/user/profile/updatePwd`;
  

  
  return new Promise((resolve, reject) => {
    uni.request({
      url: passwordUrl,
      method: 'PUT',
      data,
      header: { 
        'Authorization': 'Bearer ' + uni.getStorageSync('token'),
        'Content-Type': 'application/json'
      },
      success: (res) => {
      
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.data?.msg || '修改失败'}`));
        }
      },
      fail: (err) => {
      
        reject(err);
      }
    });
  });
}

// 获取用户菜单权限
export function getUserMenus() {
  // 由于Swagger配置了pathMapping: /dev-api，后端会自动添加这个前缀
  // 所以前端调用时不需要包含/dev-api，直接使用完整URL
  const menusUrl = `${API_BASE}/system/menu/list`;
  

  
  return new Promise((resolve, reject) => {
    uni.request({
      url: menusUrl,
      method: 'GET',
      header: { 
        'Authorization': 'Bearer ' + uni.getStorageSync('token'),
        'Content-Type': 'application/json'
      },
      success: (res) => {
      
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.data?.msg || '获取失败'}`));
        }
      },
      fail: (err) => {
      
        reject(err);
      }
    });
  });
}